using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRS
{
    /// <summary>
    /// <para>Create LRS From Existing Dataset</para>
    /// <para>Creates a linear referencing system (LRS) in the specified workspace using existing datasets.</para>
    /// <para>使用现有数据集在指定工作空间中创建线性参考系统 （LRS）。</para>
    /// </summary>    
    [DisplayName("Create LRS From Existing Dataset")]
    public class CreateLRSFromExistingDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateLRSFromExistingDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_lrs_name">
        /// <para>LRS Name</para>
        /// <para>The name of the LRS to create. The name for the LRS cannot already exist in the geodatabase.</para>
        /// <para>要创建的 LRS 的名称。地理数据库中不能已存在 LRS 的名称。</para>
        /// </param>
        /// <param name="_centerline_feature_class">
        /// <para>Centerline - Feature Class</para>
        /// <para>The feature class to be used as the centerline in the LRS.</para>
        /// <para>要在 LRS 中用作中心线的要素类。</para>
        /// </param>
        /// <param name="_centerline_centerline_id_field">
        /// <para>Centerline - Centerline ID Field</para>
        /// <para>The GUID field containing the centerline ID. The field type must match the centerlineID field type in the centerline sequence table.</para>
        /// <para>包含中心线 ID 的 GUID 字段。字段类型必须与中心线序列表中的 centerlineID 字段类型匹配。</para>
        /// </param>
        /// <param name="_centerline_sequence_table">
        /// <para>Centerline Sequence - Table</para>
        /// <para>The table to be used as the centerline sequence in the LRS.</para>
        /// <para>在 LRS 中用作中心线序列的表格。</para>
        /// </param>
        /// <param name="_centerline_sequence_centerline_id_field">
        /// <para>Centerline Sequence - Centerline ID Field</para>
        /// <para>The GUID field containing the centerline sequence ID. The field type must match the centerlineID field type and length in the centerline feature class.</para>
        /// <para>包含中心线序列 ID 的 GUID 字段。字段类型必须与中心线要素类中的 centerlineID 字段类型和长度匹配。</para>
        /// </param>
        /// <param name="_centerline_sequence_route_id_field">
        /// <para>Centerline Sequence - Route ID Field</para>
        /// <para>The GUID or text field containing the centerline sequence route ID. The field type must match the routeID field type and length in the calibration point and redline feature classes.</para>
        /// <para>包含中心线序列路由 ID 的 GUID 或文本字段。字段类型必须与校准点和红线要素类中的 routeID 字段类型和长度匹配。</para>
        /// </param>
        /// <param name="_centerline_sequence_from_date_field">
        /// <para>Centerline Sequence - From Date Field</para>
        /// <para>A date field containing the centerline sequence from date.</para>
        /// <para>包含从日期开始的中心线序列的日期字段。</para>
        /// </param>
        /// <param name="_centerline_sequence_to_date_field">
        /// <para>Centerline Sequence - To Date Field</para>
        /// <para>A date field containing the centerline sequence to date.</para>
        /// <para>包含迄今为止的中心线序列的日期字段。</para>
        /// </param>
        /// <param name="_centerline_sequence_network_id_field">
        /// <para>Centerline Sequence - Network ID Field</para>
        /// <para>The field containing the centerline sequence network ID. The short integer field type is supported.</para>
        /// <para>包含中心线序列网络 ID 的字段。支持短整数字段类型。</para>
        /// </param>
        /// <param name="_calibration_point_feature_class">
        /// <para>Calibration Point - Feature Class</para>
        /// <para>The feature class to be used as the calibration point in the LRS.</para>
        /// <para>要用作 LRS 中校准点的要素类。</para>
        /// </param>
        /// <param name="_calibration_point_measure_field">
        /// <para>Calibration Point - Measure Field</para>
        /// <para>The field containing the calibration point measure. The double field type is supported.</para>
        /// <para>包含校准点测量值的字段。支持双字段类型。</para>
        /// </param>
        /// <param name="_calibration_point_from_date_field">
        /// <para>Calibration Point - From Date Field</para>
        /// <para>A date field containing the calibration point from date.</para>
        /// <para>包含从日期开始的校准点的日期字段。</para>
        /// </param>
        /// <param name="_calibration_point_to_date_field">
        /// <para>Calibration Point - To Date Field</para>
        /// <para>A date field containing the calibration point to date.</para>
        /// <para>包含到日期为止的校准点的日期字段。</para>
        /// </param>
        /// <param name="_calibration_point_route_id_field">
        /// <para>Calibration Point - Route ID Field</para>
        /// <para>The field containing the calibration point route ID. GUID and text field types are supported. The field type must match the routeID field type and length in the centerline sequence table and Redline feature class.</para>
        /// <para>支持包含校准点路由 ID 的字段、GUID 和文本字段类型。字段类型必须与中心线序列表和红线要素类中的 routeID 字段类型和长度匹配。</para>
        /// </param>
        /// <param name="_calibration_point_network_id_field">
        /// <para>Calibration Point - Network ID Field</para>
        /// <para>The field containing the calibration point network ID. The short integer field type is supported.</para>
        /// <para>包含校准点网络 ID 的字段。支持短整数字段类型。</para>
        /// </param>
        /// <param name="_redline_feature_class">
        /// <para>Redline - Feature Class</para>
        /// <para>The feature class to be used as the redline in the LRS.</para>
        /// <para>要在 LRS 中用作红线的要素类。</para>
        /// </param>
        /// <param name="_redline_from_measure_field">
        /// <para>Redline - From Measure Field</para>
        /// <para>The field containing the redline from measure. The double field type is supported.</para>
        /// <para>包含测量中的红线的字段。支持双字段类型。</para>
        /// </param>
        /// <param name="_redline_to_measure_field">
        /// <para>Redline - To Measure Field</para>
        /// <para>The field containing the redline to measure. The double field type is supported.</para>
        /// <para>包含要测量的红线的字段。支持双字段类型。</para>
        /// </param>
        /// <param name="_redline_route_id_field">
        /// <para>Redline - Route ID Field</para>
        /// <para>The field containing the redline route ID. GUID and text field types are supported. The field type must match the routeID field type and length in the calibration point feature class and centerline sequence table.</para>
        /// <para>支持包含红线路由 ID、GUID 和文本字段类型的字段。字段类型必须与校准点要素类和中心线序列表中的 routeID 字段类型和长度匹配。</para>
        /// </param>
        /// <param name="_redline_route_name_field">
        /// <para>Redline - Route Name Field</para>
        /// <para>A text field containing the redline route name.</para>
        /// <para>包含红线路由名称的文本字段。</para>
        /// </param>
        /// <param name="_redline_effective_date_field">
        /// <para>Redline - Effective Date Field</para>
        /// <para>A date field containing the redline effective date.</para>
        /// <para>包含红线生效日期的日期字段。</para>
        /// </param>
        /// <param name="_redline_activity_type_field">
        /// <para>Redline - Activity Type Field</para>
        /// <para>The field containing the redline activity type. The short integer field type is supported.</para>
        /// <para>包含红线活动类型的字段。支持短整数字段类型。</para>
        /// </param>
        /// <param name="_redline_network_id_field">
        /// <para>Redline - Network ID Field</para>
        /// <para>The field containing the redline network ID. The short integer field type is supported.</para>
        /// <para>包含红线网络 ID 的字段。支持短整数字段类型。</para>
        /// </param>
        public CreateLRSFromExistingDataset(object _lrs_name, object _centerline_feature_class, object _centerline_centerline_id_field, object _centerline_sequence_table, object _centerline_sequence_centerline_id_field, object _centerline_sequence_route_id_field, object _centerline_sequence_from_date_field, object _centerline_sequence_to_date_field, object _centerline_sequence_network_id_field, object _calibration_point_feature_class, object _calibration_point_measure_field, object _calibration_point_from_date_field, object _calibration_point_to_date_field, object _calibration_point_route_id_field, object _calibration_point_network_id_field, object _redline_feature_class, object _redline_from_measure_field, object _redline_to_measure_field, object _redline_route_id_field, object _redline_route_name_field, object _redline_effective_date_field, object _redline_activity_type_field, object _redline_network_id_field)
        {
            this._lrs_name = _lrs_name;
            this._centerline_feature_class = _centerline_feature_class;
            this._centerline_centerline_id_field = _centerline_centerline_id_field;
            this._centerline_sequence_table = _centerline_sequence_table;
            this._centerline_sequence_centerline_id_field = _centerline_sequence_centerline_id_field;
            this._centerline_sequence_route_id_field = _centerline_sequence_route_id_field;
            this._centerline_sequence_from_date_field = _centerline_sequence_from_date_field;
            this._centerline_sequence_to_date_field = _centerline_sequence_to_date_field;
            this._centerline_sequence_network_id_field = _centerline_sequence_network_id_field;
            this._calibration_point_feature_class = _calibration_point_feature_class;
            this._calibration_point_measure_field = _calibration_point_measure_field;
            this._calibration_point_from_date_field = _calibration_point_from_date_field;
            this._calibration_point_to_date_field = _calibration_point_to_date_field;
            this._calibration_point_route_id_field = _calibration_point_route_id_field;
            this._calibration_point_network_id_field = _calibration_point_network_id_field;
            this._redline_feature_class = _redline_feature_class;
            this._redline_from_measure_field = _redline_from_measure_field;
            this._redline_to_measure_field = _redline_to_measure_field;
            this._redline_route_id_field = _redline_route_id_field;
            this._redline_route_name_field = _redline_route_name_field;
            this._redline_effective_date_field = _redline_effective_date_field;
            this._redline_activity_type_field = _redline_activity_type_field;
            this._redline_network_id_field = _redline_network_id_field;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Create LRS From Existing Dataset";

        public override string CallName => "locref.CreateLRSFromExistingDataset";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_lrs_name, _centerline_feature_class, _centerline_centerline_id_field, _centerline_sequence_table, _centerline_sequence_centerline_id_field, _centerline_sequence_route_id_field, _centerline_sequence_from_date_field, _centerline_sequence_to_date_field, _centerline_sequence_network_id_field, _calibration_point_feature_class, _calibration_point_measure_field, _calibration_point_from_date_field, _calibration_point_to_date_field, _calibration_point_route_id_field, _calibration_point_network_id_field, _redline_feature_class, _redline_from_measure_field, _redline_to_measure_field, _redline_route_id_field, _redline_route_name_field, _redline_effective_date_field, _redline_activity_type_field, _redline_network_id_field, _out_path];

        /// <summary>
        /// <para>LRS Name</para>
        /// <para>The name of the LRS to create. The name for the LRS cannot already exist in the geodatabase.</para>
        /// <para>要创建的 LRS 的名称。地理数据库中不能已存在 LRS 的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _lrs_name { get; set; }


        /// <summary>
        /// <para>Centerline - Feature Class</para>
        /// <para>The feature class to be used as the centerline in the LRS.</para>
        /// <para>要在 LRS 中用作中心线的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_feature_class { get; set; }


        /// <summary>
        /// <para>Centerline - Centerline ID Field</para>
        /// <para>The GUID field containing the centerline ID. The field type must match the centerlineID field type in the centerline sequence table.</para>
        /// <para>包含中心线 ID 的 GUID 字段。字段类型必须与中心线序列表中的 centerlineID 字段类型匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline - Centerline ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_centerline_id_field { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - Table</para>
        /// <para>The table to be used as the centerline sequence in the LRS.</para>
        /// <para>在 LRS 中用作中心线序列的表格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_table { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - Centerline ID Field</para>
        /// <para>The GUID field containing the centerline sequence ID. The field type must match the centerlineID field type and length in the centerline feature class.</para>
        /// <para>包含中心线序列 ID 的 GUID 字段。字段类型必须与中心线要素类中的 centerlineID 字段类型和长度匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Centerline ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_centerline_id_field { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - Route ID Field</para>
        /// <para>The GUID or text field containing the centerline sequence route ID. The field type must match the routeID field type and length in the calibration point and redline feature classes.</para>
        /// <para>包含中心线序列路由 ID 的 GUID 或文本字段。字段类型必须与校准点和红线要素类中的 routeID 字段类型和长度匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_route_id_field { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - From Date Field</para>
        /// <para>A date field containing the centerline sequence from date.</para>
        /// <para>包含从日期开始的中心线序列的日期字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_from_date_field { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - To Date Field</para>
        /// <para>A date field containing the centerline sequence to date.</para>
        /// <para>包含迄今为止的中心线序列的日期字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_to_date_field { get; set; }


        /// <summary>
        /// <para>Centerline Sequence - Network ID Field</para>
        /// <para>The field containing the centerline sequence network ID. The short integer field type is supported.</para>
        /// <para>包含中心线序列网络 ID 的字段。支持短整数字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_network_id_field { get; set; }


        /// <summary>
        /// <para>Calibration Point - Feature Class</para>
        /// <para>The feature class to be used as the calibration point in the LRS.</para>
        /// <para>要用作 LRS 中校准点的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_feature_class { get; set; }


        /// <summary>
        /// <para>Calibration Point - Measure Field</para>
        /// <para>The field containing the calibration point measure. The double field type is supported.</para>
        /// <para>包含校准点测量值的字段。支持双字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_measure_field { get; set; }


        /// <summary>
        /// <para>Calibration Point - From Date Field</para>
        /// <para>A date field containing the calibration point from date.</para>
        /// <para>包含从日期开始的校准点的日期字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_from_date_field { get; set; }


        /// <summary>
        /// <para>Calibration Point - To Date Field</para>
        /// <para>A date field containing the calibration point to date.</para>
        /// <para>包含到日期为止的校准点的日期字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_to_date_field { get; set; }


        /// <summary>
        /// <para>Calibration Point - Route ID Field</para>
        /// <para>The field containing the calibration point route ID. GUID and text field types are supported. The field type must match the routeID field type and length in the centerline sequence table and Redline feature class.</para>
        /// <para>支持包含校准点路由 ID 的字段、GUID 和文本字段类型。字段类型必须与中心线序列表和红线要素类中的 routeID 字段类型和长度匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_route_id_field { get; set; }


        /// <summary>
        /// <para>Calibration Point - Network ID Field</para>
        /// <para>The field containing the calibration point network ID. The short integer field type is supported.</para>
        /// <para>包含校准点网络 ID 的字段。支持短整数字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_network_id_field { get; set; }


        /// <summary>
        /// <para>Redline - Feature Class</para>
        /// <para>The feature class to be used as the redline in the LRS.</para>
        /// <para>要在 LRS 中用作红线的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_feature_class { get; set; }


        /// <summary>
        /// <para>Redline - From Measure Field</para>
        /// <para>The field containing the redline from measure. The double field type is supported.</para>
        /// <para>包含测量中的红线的字段。支持双字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - From Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_from_measure_field { get; set; }


        /// <summary>
        /// <para>Redline - To Measure Field</para>
        /// <para>The field containing the redline to measure. The double field type is supported.</para>
        /// <para>包含要测量的红线的字段。支持双字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - To Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_to_measure_field { get; set; }


        /// <summary>
        /// <para>Redline - Route ID Field</para>
        /// <para>The field containing the redline route ID. GUID and text field types are supported. The field type must match the routeID field type and length in the calibration point feature class and centerline sequence table.</para>
        /// <para>支持包含红线路由 ID、GUID 和文本字段类型的字段。字段类型必须与校准点要素类和中心线序列表中的 routeID 字段类型和长度匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_route_id_field { get; set; }


        /// <summary>
        /// <para>Redline - Route Name Field</para>
        /// <para>A text field containing the redline route name.</para>
        /// <para>包含红线路由名称的文本字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Route Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_route_name_field { get; set; }


        /// <summary>
        /// <para>Redline - Effective Date Field</para>
        /// <para>A date field containing the redline effective date.</para>
        /// <para>包含红线生效日期的日期字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Effective Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_effective_date_field { get; set; }


        /// <summary>
        /// <para>Redline - Activity Type Field</para>
        /// <para>The field containing the redline activity type. The short integer field type is supported.</para>
        /// <para>包含红线活动类型的字段。支持短整数字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Activity Type Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_activity_type_field { get; set; }


        /// <summary>
        /// <para>Redline - Network ID Field</para>
        /// <para>The field containing the redline network ID. The short integer field type is supported.</para>
        /// <para>包含红线网络 ID 的字段。支持短整数字段类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline - Network ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_network_id_field { get; set; }


        /// <summary>
        /// <para>Output Location</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_path { get; set; }


        public CreateLRSFromExistingDataset SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}